#include <iostream>
#include <vector>
#include <cmath>
#include <stdio.h>
#include <sstream>
#include "grafo.cpp"
#include <iostream> 
#include <iomanip> 

using namespace std;


struct Coordenada
{
  int x;
  int y;
};

Grafo* pedirEntrada(int *n,int *k,Grafo *grafo)
{
  Coordenada coord;
  cin >> *n;
  cin >> *k;
  vector<Coordenada> vecCord;
  vector<Vertice> vecVert;
  for(int j = 0; j < *n; j++) // O(n)
  {
    cin >> coord.x;
    cin >> coord.y;
    vecCord.push_back(coord);
  }
  for(int i = 0; i < *n; i++) // O(n)
  {
    stringstream ss;
    ss << i;
    string str = ss.str();
    Vertice nuevoVertice = Vertice(str);
    vecVert.push_back(nuevoVertice);
  }
  
  for(int i = 0; i < *n; i++) 
    for(int j = 0; j <= i; j++) // O(n^2)
      if(i != j)
      {
	vecVert[i].addAdjVertice(&(vecVert[j]), sqrt(pow(vecCord[i].x - vecCord[j].x,2) + pow(vecCord[i].y - vecCord[j].y,2)));
      }
   for(int i = 0; i < *n; i++)
     grafo->agregarVertice(&(vecVert[i]));
   cout << "ok!" << endl;
   grafo->mostrarGrafo();
}

int main()
{
  int n,k;
  Grafo grafo = Grafo();
  pedirEntrada(&n,&k,&grafo);
  generarBosqueMinimo(n,k,&grafo);
  return 0;
  
}